from flask import Flask
from flask_migrate import Migrate
from flask_cors import CORS
# from datetime import timedelta
import os

# 引入项目的配置文件
import config
from exts import db, mail
from models import Users, Address, Slides, Orders, Order_details, Categories, Cart, Comments, Goods

# 引入蓝图
from blueprints.user import bp as user_bp
from blueprints.manager import bp as manager_bp

# 引入flask钩子函数的具体内容
from utils.middleware import get_userinfo

app = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)
# 初始化db
db.init_app(app)
mail.init_app(app)
# 绑定ORM模型映射关系
migrate = Migrate(app, db)
# 支持跨域请求
CORS(app)
# 生成SECRET_KEY
app.config['SECRET_KEY'] = os.urandom(24)
# 在蓝图里使用session应按下面语句使用
# 设置session对象的有效期，此处设置为7天内有效
# session.permanent = True
# app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)

app.register_blueprint(user_bp)
app.register_blueprint(manager_bp)

# 检查数据库是否能成功连接
# with app.app_context():
#     with db.engine.connect() as conn:
#         rs = conn.execute("select 1")
#         print(rs.fetchone())

# 重建数据库表
# with app.app_context():
#     with db.engine.connect() as conn:
#         db.drop_all()
#         db.create_all()

# ORM模型映射成表
# 1. flask db init 打包生成映射文件(./migrations)，只需执行一次
# 2. flask db migrate 识别ORM模型的改变，生成迁移脚本，如果字段没有变化，则不会生成
# 3. flask db upgrade 运行迁移脚本，同步到数据库中

app.before_request(get_userinfo)

if __name__ == '__main__':
    app.run(debug=True)
